home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / Framework / Event.hxx < prev    next >
Text File  |  1995-07-26  |  3KB  |  113 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // $Id: Event.hxx,v 1.1 1994/02/18 19:49:44 bmott Exp $
  3. ///////////////////////////////////////////////////////////////////////////////
  4. // Event.hxx
  5. //
  6. //   This class maintains a queue of events requested by EventBase derived
  7. // objects.
  8. //
  9. //
  10. // BSVC "A Microprocessor Simulation Framework"
  11. // Copyright (c) 1993
  12. // By: Bradford W. Mott
  13. // August 11,1993
  14. //
  15. ///////////////////////////////////////////////////////////////////////////////
  16. // $Log: Event.hxx,v $
  17. // Revision 1.1  1994/02/18  19:49:44  bmott
  18. // Initial revision
  19. //
  20. ///////////////////////////////////////////////////////////////////////////////
  21.  
  22. #ifndef EVENT_HXX
  23. #define EVENT_HXX
  24.  
  25. class EventHandler;
  26.  
  27. ///////////////////////////////////////////////////////////////////////////////
  28. // This should be the base class for any class that is going to register
  29. // events with the event handler.
  30. ///////////////////////////////////////////////////////////////////////////////
  31. class EventBase {
  32.   private:
  33.     EventHandler* event_handler;
  34.  
  35.   public:
  36.     EventBase(EventHandler* h)
  37.         : event_handler(h) 
  38.     {}
  39.  
  40.     virtual ~EventBase();
  41.  
  42.     virtual void EventCallback(long data, void* pointer)=0;
  43. };
  44.  
  45. ///////////////////////////////////////////////////////////////////////////////
  46. // This class manages a list of time events.  When the time expires for
  47. // an event the EventCallback() for the associate object is called
  48. ///////////////////////////////////////////////////////////////////////////////
  49. class EventHandler {
  50.   private:
  51.  
  52.     // The event class
  53.     class Event {
  54.       private:
  55.         // The object that owns this event
  56.         EventBase* object;
  57.  
  58.         // Data passed to the callback routine
  59.         void* pointer; 
  60.         long  data;
  61.  
  62.       public:
  63.         Event(EventBase* o, long d, void* p, unsigned long t) 
  64.             : object(o), data(d), pointer(p),
  65.               total_time(t),
  66.               next((void *)0)
  67.         {};
  68.  
  69.         // Dispatch the event by calling the object's callback routine
  70.         inline void Dispatch()
  71.         { object->EventCallback(data, pointer); }
  72.  
  73.         // Return the owning object
  74.         inline EventBase* Owner()
  75.         { return(object); }
  76.  
  77.         // Total amount of time to elapse before the event
  78.         const long total_time;
  79.  
  80.         // Time left before the event occurs
  81.         long delta_time;
  82.  
  83.         // Pointer to the next event
  84.         Event *next;
  85.     };
  86.  
  87.     // Linked list of events
  88.     Event *list;
  89.  
  90.     // Number of calls since last time update
  91.     long iterations;
  92.  
  93.     // Last usec_per_check update time
  94.     long old_time;
  95.  
  96.     // Average micro-seconds per call to Check
  97.     long usec_per_check;
  98.  
  99.   public:
  100.     EventHandler();
  101.  
  102.     // Check for any expired events
  103.     void Check();
  104.  
  105.     // Add an event to the event list
  106.     void Add(EventBase* object, long data, void* pointer, long time);
  107.  
  108.     // Remove events for the given object
  109.     void Remove(EventBase* object); 
  110. };
  111.  
  112. #endif
  113.